'use strict';

const Controller=require('egg').Controller;

class UserController extends Controller{
    async register(){
        const {ctx}=this;
        const {username,password}=ctx.request.body;

        if(!username || !password){  // 前后端都校验
            ctx.body={
                code:500,
                msg:'账号或密码不能为空',
                data:null
            }
            return;
        }
        // 在数据库中检验当前user账号是否存在，植入数据库中

        const resultInfo = await ctx.service.user.getUserByName(username);
        if(resultInfo && resultInfo.id){
            ctx.body={
                code:500,
                msg:'账号已被注册，请重新输入',
                data:null
            }
            return;
        }

        let id=2;
        // 往数据库植入数据
        const result=await ctx.service.user.register({
            id,
            username,
            password,
            avatar:'http.hii',
            ctime:'2001-2-1'
        });
        if(!result.errno){
            ctx.body={
                code:200,
                msg:'注册成功',
                data:null
            }
            id++;
            console.log(result);
        }
        else{
            ctx.body={
                code:500,
                msg:'注册失败',
                data:null
            }
        }

    }

    async login(){
        const {ctx,app}=this;
        const {username,password}=ctx.request.body;
        const userInfo=await ctx.service.user.getUserByName(username);
        if(!userInfo || !userInfo.id){
            ctx.body={
                code:500,
                msg:'账号不存在',
                data:null
            }
            return;
        }
        
        // console.log(userInfo);
        if(userInfo && userInfo.password != password){
            ctx.body={
                code:500,
                msg:'密码错误',
                data:null
            }
            return ;
        }

        // console.log('...');
        // 账号密码都对，给前端生成一个token标记
        const token=app.jwt.sign({  // 两个参数，第一个是对象是要加密的内容，第二个是加密字符串
            id:userInfo.id,
            username:userInfo.username,
            exp:~~(Date.now() /1000)+(24*60*60)  // 过期时间 ~~ 和math.floor的效果一样，新运算符
        },app.config.jwt.secret);

        // console.log(token);
        ctx.body={
            code:200,
            msg:'登录成功',
            data:{
                token
            }
        }

    }
}

module.exports = UserController;